//
//  Model3D_obj_Importer.hpp
//  C3W_Demo_By_Fan
//
//  Created by 范静涛 on 2024/7/21.
//

//------------------------------------------------------------------------------
//【文件名】Model3D_obj_Importer.hpp
//【功能模块和目的】导入obj文件到Model3D的导入器类声明
//【开发者及日期】范静涛 2024/7/21
//【更改记录】
//------------------------------------------------------------------------------

#ifndef Model3D_obj_Importer_hpp
#define Model3D_obj_Importer_hpp

//Importer基类模版所属头文件
#include "Importer.hpp"
//Model3D类所属头文件
#include "Model3D.hpp"
//std::ifstream所属头文件
#include <fstream>

using Model3D_Importer = Importer<Model3D>;

//------------------------------------------------------------------------------
//【类名】Model3D_obj_Importer
//【功能】导入obj文件到Model3D的导入器
//【接口说明】
//    继承得到全部基类接口
//    默认构造函数，手动触发基类构造函数，指定文件扩展名为"obj"
//    虚析构函数（可能做基类）
//    派生类接口：从文件流导入到Modle3D类型对象接口override
//【特殊使用说明】需要手动调用Model3D_Importer::Registr<Model3D_obj_Importer>()，注册类
//             之后可以通过Model3D_Importer::GetInstanceXXX获取具体导入器实例
//【开发者及日期】 范静涛 2024/7/21
//【更改记录】
//------------------------------------------------------------------------------
class Model3D_obj_Importer : public Importer<Model3D>{
public:
    //--------------------------------------------------------------------------
    //必要的构造、析构、赋值行为
    //--------------------------------------------------------------------------
    //默认构造函数，手动触发基类构造函数，指定文件扩展名为"obj"
    Model3D_obj_Importer();
    //无拷贝构造，因为基类没有
    Model3D_obj_Importer(const Model3D_obj_Importer&) = delete;
    //无赋值运算符，因为基类没有
    Model3D_obj_Importer& operator=(const Model3D_obj_Importer&) = delete;
    //虚析构函数（可能做基类），无动态构造成员，默认实现
    virtual ~Model3D_obj_Importer() = default;
    //--------------------------------------------------------------------------
    //受保护的 非静态Getter成员函数：需检查所有Getter是否有后置const
    //--------------------------------------------------------------------------
    //从文件流导入到Model3D对象接口override
    virtual Model3D LoadFromStream(std::ifstream& Stream) const override;
};

#endif /* Model3D_obj_Importer_hpp */
